package atguigu.file;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class FileOpDemo {

    public static void main(String[] args) {
        String src = "E:\\language\\java\\util.demo";
        String dest = "E:\\util.demo";
        copyDirFiles(src, dest);
    }

    // 创建文件夹
    public static void createDir(String dirPath) {
        // 创建文件夹
        File dir = new File(dirPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
    }

    // 删除文件夹
    public static void deleteDir(String dirPath) {
        // 创建文件夹
        File dir = new File(dirPath);
        if (dir.exists()) {
            dir.delete();
        }
    }

    // 创建文件
    public static void createFile(String filePath) {
        // 创建文件夹
        File file = new File(filePath);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 删除文件
    public static void deleteFile(String filePath) {
        // 创建文件夹
        File file = new File(filePath);
        if (file.exists()) {
            file.delete();
        }
    }

    // 递归的删除文件夹中的文件
    public static void deleteDirFiles(String dirPath) {
        // 创建文件夹
        File dir = new File(dirPath);
        if (dir.exists()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    deleteDirFiles(file.getAbsolutePath());
                } else {
                    file.delete();
                }
            }
        }
    }

    // 复制文件
    public static void copyFile(String src, String dest) {
        Path srcPath = Paths.get(src);
        Path destPath = Paths.get(dest);
        try {
            if(destPath.toFile().exists()){
                System.out.println("文件已存在");
            }else{
                Files.copy(srcPath, destPath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void copyDir(String src, String dest) {
        Path srcPath = Paths.get(src);
        Path destPath = Paths.get(dest);
        try {
            if (!destPath.toFile().exists()){
                createDir(dest);
                Files.copy(srcPath, destPath,StandardCopyOption.REPLACE_EXISTING);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 递归的拷贝文件夹和文件
    public static void copyDirFiles(String src, String dest) {
        // 创建文件夹
        File srcDir = new File(src);
        File destDir = new File(dest);
        if (srcDir.exists()) {
            File[] files = srcDir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    copyDir(file.getAbsolutePath(), destDir.getAbsolutePath() + File.separator + file.getName());
                    copyDirFiles(file.getAbsolutePath(), destDir.getAbsolutePath() + File.separator + file.getName());
                } else {
                    copyFile(file.getAbsolutePath(), destDir.getAbsolutePath() + File.separator + file.getName());
                }
            }
        }
    }
}
